/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
 */

package com.device.cp.penspeeddemo;

import android.content.Context;
import android.graphics.Rect;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.WindowManager;

import java.util.Optional;

/**
 * UI工具类
 *
 * @since 2022-02-12
 */
public class UiUtils {
    private static Optional<DisplayMetrics> getDm(Context ctx) {
        Object obj = ctx.getSystemService(Context.WINDOW_SERVICE);
        if (obj != null && obj instanceof WindowManager) {
            WindowManager wm = (WindowManager) obj;
            DisplayMetrics disMedics = new DisplayMetrics();
            assert wm != null;
            wm.getDefaultDisplay().getMetrics(disMedics);
            return Optional.ofNullable(disMedics);
        }
        return Optional.empty();
    }

    /**
     * 获取设备屏幕宽度，或者应用在屏幕上显示的宽度
     *
     * @param ctx Context, getApplicationContext获取的Context，得到设备屏幕宽度，
     *     getBaseContext获取的Context, 得到应用窗口在屏幕上显示的宽度
     * @return 宽度值
     */
    public static int getScreenWidth(Context ctx) {
        Optional<DisplayMetrics> optDm = getDm(ctx);
        if (optDm.isPresent()) {
            return optDm.get().widthPixels;
        }
        return 0;
    }

    /**
     * 获取设备屏幕高度，或者应用在屏幕上显示的高度
     *
     * @param ctx Context, getApplicationContext获取的Context，得到设备屏幕高度，
     *     getBaseContext获取的Context, 得到应用窗口在屏幕上显示的高度
     * @return 高度值
     */
    public static int getScreenHeight(Context ctx) {
        Optional<DisplayMetrics> optDm = getDm(ctx);
        if (optDm.isPresent()) {
            return optDm.get().heightPixels;
        }
        return 0;
    }

    /**
     * 获取View在屏幕上的位置
     *
     * @param view 入参view对象
     * @return 矩形范围, 屏幕上的位置
     */
    public static Rect getViewRectInScreen(View view) {
        Rect rect = new Rect();
        int[] pos = new int[2];
        view.getLocationOnScreen(pos);
        rect.set(pos[0], pos[1], pos[0] + view.getWidth(), pos[1] + view.getHeight());
        return rect;
    }
}
